home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / pc / SNNSV32.ZIP / SNNSv3.2 / xgui / sources / bn_assoz.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-04-25  |  7.2 KB  |  275 lines

  1. /*****************************************************************************
  2.   FILE           : bn_assoz.c
  3.   SHORTNAME      : bn_assoz
  4.   SNNS VERSION   : 3.2
  5.  
  6.   PURPOSE        : Bignet generator of n-Component Kohonen Networks 
  7.   NOTES          :
  8.  
  9.   AUTHOR         : Guenter Mamier
  10.   DATE           : February 11, 1994
  11.  
  12.   CHANGED BY     : 
  13.   IDENTIFICATION : @(#)bn_assoz.c    1.3 3/2/94
  14.   SCCS VERSION   : 1.3
  15.   LAST CHANGE    : 3/2/94
  16.  
  17.              Copyright (c) 1990-1994  SNNS Group, IPVR, Univ. Stuttgart, FRG
  18.  
  19. ******************************************************************************/
  20.  
  21. #include <stdlib.h>
  22. #include <stdio.h>
  23. #include <X11/Xlib.h>
  24. #include <X11/Xutil.h>
  25. #include <X11/Xos.h>
  26. #include <X11/cursorfont.h>
  27. #include <X11/Intrinsic.h>
  28. #include <X11/StringDefs.h>
  29. #include <X11/Shell.h>
  30. #include <X11/Xaw/Box.h>
  31. #include <X11/Xaw/Simple.h>
  32. #include <X11/Xaw/Grip.h>
  33. #include <X11/Xaw/Form.h>
  34. #include <X11/Xaw/SmeBSB.h>
  35. #include <X11/Xaw/SmeLine.h>
  36. #include <X11/Xaw/Viewport.h>
  37. #include <X11/Xaw/Label.h>
  38. #include <X11/Xaw/Toggle.h>
  39. #include <X11/Xaw/Command.h>
  40. #include <X11/Xaw/Cardinals.h>
  41. #include <X11/Xaw/AsciiText.h>
  42. #include <X11/Xaw/Scrollbar.h>
  43.  
  44. #include "ui.h"
  45. #include "glob_typ.h"
  46. #include "kr_ui.h"
  47. #include "ui_mainP.h"
  48. #include "ui_confirmer.h"
  49. #include "ui_textP.h"
  50. #include "ui_utilP.h"
  51. #include "ui_netUpdate.h"
  52. #include "ui_status.h"
  53. #include "ui_xWidgets.h"
  54. #include "ui_fileP.h"
  55. #include "ui_display.h"
  56. #include "ui_event.h"
  57. #include "ui_selection.h"
  58. #include "bn_basics.h"
  59.  
  60. #include "bn_assoz.ph"
  61.  
  62. /*****************************************************************************
  63.   FUNCTION : bn_create_assoz
  64.  
  65.   PURPOSE  : create the autoassoziative bignet window.
  66.   NOTES    :
  67.   RETURNS  :
  68.  
  69.   UPDATE   : 
  70. ******************************************************************************/
  71. void bn_create_assoz (void)
  72. {
  73.   Widget   box, panel, create_assoz, done, dummy;
  74.   Arg      arg[25];
  75.   Cardinal n;
  76.   char     buf[40];
  77.   
  78.  
  79.   if (!assoz_widget_open) {
  80.     sprintf (buf, "Auto assoziative Networks");
  81.     n = 0;  
  82.     
  83.     XtSetArg(arg[n],XtNminHeight,82); n++;
  84.     XtSetArg(arg[n],XtNminWidth,254); n++;  
  85.     XtSetArg(arg[n],XtNmaxHeight,82); n++;
  86.     XtSetArg(arg[n],XtNmaxWidth,254); n++;
  87.     
  88.     
  89.     baseWidget = 
  90.       XtCreatePopupShell (buf, topLevelShellWidgetClass, ui_toplevel, arg, n); 
  91.     n = 0;  
  92.     box = XtCreateManagedWidget ("box", boxWidgetClass, baseWidget, arg, n);
  93.     panel = XtCreateManagedWidget ("form", formWidgetClass, box, NULL, 0);
  94.     
  95.     dummy= ui_xCreateLabelItem("X-size:", panel, 80, NULL, NULL);
  96.     Xsize= ui_xCreateDialogItem(" ", panel, "", 30, dummy, NULL);    
  97.     
  98.     dummy= ui_xCreateLabelItem("Y-size:", panel, 80, Xsize, NULL);
  99.     Ysize= ui_xCreateDialogItem(" ", panel, "", 30, dummy, NULL);
  100.     
  101.     create_assoz = bn_basics_xCreateButtonItem ("create_net",box,NULL,NULL);
  102.     XtAddCallback(create_assoz,XtNcallback,(XtCallbackProc)create_net_PROC,NULL);
  103.     done = bn_basics_xCreateButtonItem ("done",box,create_assoz,NULL);
  104.     XtAddCallback(done,XtNcallback,(XtCallbackProc)done_PROC,NULL);
  105.     
  106.     XtPopup (baseWidget, XtGrabNone);
  107.     assoz_widget_open = 1;
  108.     
  109.   } else ui_confirmOk ("Auto Assoziative Network already open");
  110.  
  111. } /* bn_create_assoz */
  112.  
  113.  
  114.  
  115. /*****************************************************************************
  116.   FUNCTION : done_PROC
  117.  
  118.   PURPOSE  : callback function of the done-button. 
  119.   NOTES    :
  120.   RETURNS  :
  121.  
  122.   UPDATE   : june 11 1993
  123. ******************************************************************************/
  124.  
  125. static void done_PROC (void)
  126. {
  127.     XtDestroyWidget (baseWidget);
  128.     assoz_widget_open = 0;
  129. }
  130.  
  131. /*****************************************************************************
  132.   FUNCTION : create_net_PROC
  133.  
  134.   PURPOSE  : callback function of the create-button. 
  135.   NOTES    :
  136.   RETURNS  :
  137.  
  138.   UPDATE   : june 11 1993
  139. ******************************************************************************/
  140.  
  141. static void create_net_PROC(void)
  142. {
  143.   int create= TRUE;
  144.  
  145.   X     = ui_xIntFromAsciiWidget(Xsize);
  146.   Y     = ui_xIntFromAsciiWidget(Ysize);
  147.  
  148.   HUnits= X*Y;
  149.   IUnits= X*Y;
  150.  
  151.   if ((X>0) && (Y>0)) {
  152.     if(krui_getNoOfUnits() != 0)
  153.       create= ui_confirmYes("Create will erase current network. Create?");
  154.     if (create) {
  155.       krui_deleteNet();
  156.       bn_assoz_createNet();
  157.       bn_basics_refresh();
  158.       ui_confirmOk("Network created.");
  159.     }
  160.   } else ui_confirmOk("Wrong parameters. Use positive integers.");
  161.  
  162. } /* create_net_PROC */
  163.  
  164. /*****************************************************************************
  165.   FUNCTION : errChk
  166.  
  167.   PURPOSE  : check whether an error occured during a process 
  168.   NOTES    : 
  169.   RETURNS  :
  170.  
  171.   UPDATE   : june 6 1993
  172. ******************************************************************************/
  173.  
  174. static void errChk(krui_err ret)
  175. {
  176.   if (ret != 0) ui_tw_errorMessage(krui_error(ret));
  177.  
  178.  
  179. /*****************************************************************************
  180.   FUNCTION : bn_assoz_createNet
  181.  
  182.   PURPOSE  : create the Assoz Network 
  183.   NOTES    : 
  184.   RETURNS  :
  185.  
  186.   UPDATE   : june 6 1993
  187. ******************************************************************************/
  188.  
  189. static void bn_assoz_createNet(void)
  190. {
  191.   int i,j,unit_no;
  192.   struct PosType    unit_pos;
  193.   krui_err ret;
  194.  
  195.  
  196.   /*  Allocate units */
  197.   
  198.   ret = krui_allocateUnits( IUnits + HUnits );
  199.   errChk( ret );
  200.  
  201.  
  202.   /* Create standard input Units. The size of the input layer is X*Y */
  203.   
  204.   for (i = 1; i <= Y; i++)
  205.     for (j = 1; j <= X; j++) {
  206.       unit_pos.x = j;
  207.       unit_no = krui_createDefaultUnit();
  208.       if (unit_no < 0)  errChk( unit_no );
  209.       ret = krui_setUnitTType( unit_no, INPUT );
  210.       errChk( ret );
  211.       
  212.       unit_pos.y = i;
  213.       krui_setUnitPosition( unit_no, &unit_pos );
  214.     }
  215.  
  216.   /* Create standard hidden Units. The size of the output layer is X*Y */
  217.   
  218.   for (i = 1; i <= Y; i++)
  219.     for (j = 1; j <= X; j++) {
  220.       unit_pos.x = X+4+j;
  221.       unit_no = krui_createDefaultUnit();
  222.       if (unit_no < 0)  errChk( unit_no );
  223.       ret = krui_setUnitTType( unit_no, HIDDEN );
  224.       errChk( ret );
  225.       
  226.       unit_pos.y = i;
  227.       krui_setUnitPosition( unit_no, &unit_pos );
  228.     }
  229.   
  230.  
  231.   /* Make connections between input units and hidden units  */
  232.  
  233.   for (i = IUnits + 1; i <= IUnits + HUnits; i++) {
  234.  
  235.       /*  Make hidden unit to current unit  */
  236.       ret = krui_setCurrentUnit( i );
  237.       errChk( ret );
  238.     
  239.       /* (backward) connect current (hidden) unit with input unit */
  240.       /* set all link weights from the input units to one */
  241.       ret = krui_createLink( i-IUnits, 1.0);
  242.       errChk( ret );
  243.  
  244.       /* Make connections from all hidden units  */
  245.       /* set link weights to zero */
  246.       for (j = IUnits + 1; j <= IUnits + HUnits; j++) {
  247.       ret = krui_createLink( j, 0.0);
  248.       errChk( ret );
  249.       }
  250.   } 
  251.  
  252.   /*  set the update function  */
  253.   ret = krui_setUpdateFunc (ASSOZ_UPDATE_FUNC_NAME);
  254.   errChk( ret );
  255.  
  256.   /* set the learning function */
  257.   ret = krui_setLearnFunc (ASSOZ_LEARN_FUNC_NAME);
  258.   errChk( ret );
  259.  
  260.   /* set the init function */
  261.   ret = krui_setInitialisationFunc (ASSOZ_INIT_FUNC_NAME);
  262.   errChk( ret );
  263.  
  264. } /* bn_assoz_createNet */
  265.  
  266.  
  267.  
  268. /*****************************************************************************
  269.  
  270. ******************************************************************************/
  271.  
  272. /* end of file */
  273. /* lines: 283 */
  274.